# !/usr/bin/env python
# -*- coding:utf-8 -*-
# @FileName : tree_sequence.py
# @Time     : 2024/2/22 23:39
# @Author   : Robot-Zsj
"""
description:

需要层序输出二叉树，层序遍历二叉树时需要应用队列来完成，这是队列的一个非常经典的应用。

那么把每层的节点值从左到右依次取出来，是最主要的一个环节。

先将第一个节点入队，然后逐个节点出队，并将其子节点按照先左子节点，后右子节点的顺序入队，这样就实现了将二叉树中的节点逐层出队。

在逐层出队时，将每一层的节点保存在一个列表中即可
"""


class Node:
    def __init__(self, val):
        self.val = val
        self.left = None
        self.right = None


node1 = Node(1)
node2 = Node(2)
node3 = Node(3)
node4 = Node(4)
node5 = Node(5)

node1.left = node2
node1.right = node3
node2.left = node4
node3.left = node5


def tree_sequence(root):
    result = []
    treenode_list = []
    if not root:
        return result

    treenode_list.append(root)
    while treenode_list:
        current_result = []
        next_node_list = []
        for node in treenode_list:
            current_result.append(node.val)
            if node.left:
                next_node_list.append(node.left)
            if node.right:
                next_node_list.append(node.right)
        result.append(current_result)
        treenode_list = next_node_list
    return result


print(tree_sequence(node1))


def draft(root):
    result = []
    treenode_list = []
    if not root:
        return result

    treenode_list.append(root)
    while treenode_list:
        current_node_list = []
        next_node_list = []
        for node in treenode_list:
            current_node_list.append(node.val)
            if node.left:
                next_node_list.append(node.left)
            if node.right:
                next_node_list.append(node.right)
        result.append(current_node_list)
        treenode_list = next_node_list
    return result


print(draft(node1))